package org.jin.jinaicode.service;

import com.mybatisflex.core.paginate.Page;
import jakarta.servlet.http.HttpServletRequest;
import org.jin.jinaicode.common.BaseResponse;
import org.jin.jinaicode.common.DeleteRequest;
import org.jin.jinaicode.model.dto.admin.UserAddDTO;
import org.jin.jinaicode.model.dto.admin.UserQueryDTO;
import org.jin.jinaicode.model.dto.admin.UserUpdateAdminDTO;
import org.jin.jinaicode.model.entity.User;
import org.jin.jinaicode.model.vo.UserAdminVO;

/**
 * 管理员服务接口
 */
public interface ManagerService {

  /**
   * 检查是否是管理员
   * 
   * @param request HTTP请求
   * @return 是否为管理员
   */
  boolean isAdmin(HttpServletRequest request);

  /**
   * 检查是否是管理员
   * 
   * @param user 用户对象
   * @return 是否为管理员
   */
  boolean isAdmin(User user);

  /**
   * 管理员添加用户
   * 
   * @param userAddDTO 用户添加DTO
   * @param request    HTTP请求
   * @return 新用户ID
   */
  BaseResponse<Long> addUser(UserAddDTO userAddDTO, HttpServletRequest request);

  /**
   * 管理员删除用户
   * 
   * @param deleteRequest 删除请求
   * @param request       HTTP请求
   * @return 是否成功
   */
  BaseResponse<Boolean> deleteUser(DeleteRequest deleteRequest, HttpServletRequest request);

  /**
   * 管理员更新用户
   * 
   * @param userUpdateAdminDTO 用户更新DTO
   * @param request            HTTP请求
   * @return 是否成功
   */
  BaseResponse<Boolean> updateUser(UserUpdateAdminDTO userUpdateAdminDTO, HttpServletRequest request);

  /**
   * 管理员根据ID获取用户
   * 
   * @param id      用户ID
   * @param request HTTP请求
   * @return 用户信息
   */
  BaseResponse<UserAdminVO> getUserById(long id, HttpServletRequest request);

  /**
   * 管理员分页获取用户列表
   * 
   * @param userQueryDTO 用户查询DTO
   * @param request      HTTP请求
   * @return 分页用户列表
   */
  BaseResponse<Page<UserAdminVO>> listUserByPage(UserQueryDTO userQueryDTO, HttpServletRequest request);

  /**
   * 获取脱敏的管理员用户信息
   * 
   * @param user 用户对象
   * @return 脱敏后的用户VO
   */
  UserAdminVO getUserAdminVO(User user);
}
